Skip to content

release v9 - #6512

Merged
KevinVandy merged 3 commits into
mainfrom
release-v9
Aug 4, 2026
Merged

release v9#6512
KevinVandy merged 3 commits into
mainfrom
release-v9

Conversation

@KevinVandy

@KevinVandy KevinVandy commented Aug 4, 2026

Copy link
Copy Markdown
Member

🎯 Changes

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm run test:pr.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Summary by CodeRabbit

  • New Features

    • Announced the TanStack Table v9 stable release across the table packages.
    • Added migration guide links to support upgrades from v8 to v9.
  • Documentation

    • Updated installation instructions and documentation links to reference stable releases and current guides.
    • Refreshed migration guidance with current v9 terminology and API details.
    • Removed outdated beta-specific warnings and instructions.

@nx-cloud

nx-cloud Bot commented Aug 4, 2026

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 3a06303

Command Status Duration Result
nx affected --targets=test:eslint,test:sherif,t... ✅ Succeeded 5m 7s View ↗
nx run-many --targets=build --exclude=examples/** ✅ Succeeded 27s View ↗

☁️ Nx Cloud last updated this comment at 2026-08-04 05:17:30 UTC

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

🚀 Changeset Version Preview

18 package(s) bumped directly, 0 bumped as dependents.

🟥 Major bumps

Package Version Reason
@tanstack/alpine-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/angular-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/angular-table-devtools 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/ember-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/lit-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/match-sorter-utils 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/octane-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/preact-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/preact-table-devtools 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/react-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/react-table-devtools 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/solid-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/solid-table-devtools 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/svelte-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/table-core 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/table-devtools 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/vue-table 9.0.0-beta.80 → 9.0.0 Changeset
@tanstack/vue-table-devtools 9.0.0-beta.80 → 9.0.0 Changeset

@pkg-pr-new

pkg-pr-new Bot commented Aug 4, 2026

Copy link
Copy Markdown
More templates

@tanstack/alpine-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/alpine-table@6512

@tanstack/angular-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/angular-table@6512

@tanstack/angular-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/angular-table-devtools@6512

@tanstack/ember-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/ember-table@6512

@tanstack/lit-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/lit-table@6512

@tanstack/match-sorter-utils

npm i https://pkg.pr.new/TanStack/table/@tanstack/match-sorter-utils@6512

@tanstack/octane-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/octane-table@6512

@tanstack/preact-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/preact-table@6512

@tanstack/preact-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/preact-table-devtools@6512

@tanstack/react-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/react-table@6512

@tanstack/react-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/react-table-devtools@6512

@tanstack/solid-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/solid-table@6512

@tanstack/solid-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/solid-table-devtools@6512

@tanstack/svelte-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/svelte-table@6512

@tanstack/table-core

npm i https://pkg.pr.new/TanStack/table/@tanstack/table-core@6512

@tanstack/table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/table-devtools@6512

@tanstack/vue-table

npm i https://pkg.pr.new/TanStack/table/@tanstack/vue-table@6512

@tanstack/vue-table-devtools

npm i https://pkg.pr.new/TanStack/table/@tanstack/vue-table-devtools@6512

commit: a50ba30

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The changes mark TanStack Table v9 as a stable major release. They update package installation commands, documentation links, workflow configuration, custom-feature guidance, and migration guidance across framework adapters and packages.

Changes

v9 Stable Release

Layer / File(s) Summary
Release metadata and workflow
.changeset/v9-stable-release.md, .github/workflows/zizmor.yml
The Changeset declares major releases for 19 packages. The workflow push trigger now targets main.
Stable installation and documentation links
docs/installation.md, docs/devtools.md, docs/framework/*/quick-start.md, README.md, packages/*/README.md
Installation examples no longer use the @beta tag. Framework links now use stable documentation paths.
Framework feature and migration guidance
docs/framework/*/guide/custom-features.md, docs/framework/*/guide/migrating.md
Feature links now target main. Migration guides use current V8/V9 terminology and remove outdated beta-specific notes.
Package migration skills
packages/*/skills/*
Migration skills describe current v9 APIs, removed rowModels and selectors, and logical column-pinning terminology without obsolete beta qualifiers.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

Suggested reviewers: alemtuzlak

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description includes the required headings but provides no change summary and leaves all checklist items unchecked. Add the change summary and complete the contribution, testing, and release-impact checklist items.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change as the v9 release.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release-v9

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.changeset/v9-stable-release.md:
- Line 22: Update the “Migrating to V9” link in the stable release changelog to
use a version-pinned V9 documentation URL instead of the /latest/ path,
preserving the framework-specific migration guide link structure.
- Around line 2-19: Add the omitted nineteenth package to the major-release
package list in v9-stable-release.md, preserving the existing major bump
declarations for all listed packages.
- Around line 2-19: Update the release plan for the listed TanStack Table
packages by running the changeset prerelease-exit flow before publishing, or
otherwise pinning the stable release versions to 9.0.0 instead of applying major
increments from 9.0.0-beta.80. Ensure all packages in the changeset resolve to
the intended 9.0.0 release.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: efd0f84d-3124-44c4-9546-106fea6adc71

📥 Commits

Reviewing files that changed from the base of the PR and between 9e523bc and 3a06303.

📒 Files selected for processing (1)
  • .changeset/v9-stable-release.md

Comment on lines +2 to +19
'@tanstack/table-core': major
'@tanstack/table-devtools': major
'@tanstack/alpine-table': major
'@tanstack/angular-table': major
'@tanstack/angular-table-devtools': major
'@tanstack/ember-table': major
'@tanstack/lit-table': major
'@tanstack/octane-table': major
'@tanstack/preact-table': major
'@tanstack/preact-table-devtools': major
'@tanstack/react-table': major
'@tanstack/react-table-devtools': major
'@tanstack/solid-table': major
'@tanstack/solid-table-devtools': major
'@tanstack/svelte-table': major
'@tanstack/vue-table': major
'@tanstack/vue-table-devtools': major
'@tanstack/match-sorter-utils': major

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

python - <<'PY'
from pathlib import Path
import re

text = Path(".changeset/v9-stable-release.md").read_text()
packages = re.findall(r"^'(`@tanstack/`[^']+)': major$", text, re.MULTILINE)

print(f"declared packages: {len(packages)}")
print("\n".join(packages))

if len(packages) != 19:
    raise SystemExit("Expected 19 package entries")
PY

Repository: TanStack/table

Length of output: 655


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== changeset =="
cat -n .changeset/v9-stable-release.md

echo
echo "== workspace package.json packages =="
fd 'package\.json$' . | sed 's#^\./##' | rg '(^|/)package\.json$' | while F read -r f; do
  echo "--- $f"
  python3 - <<PY
import json
from pathlib import Path
p=Path("$f")
try:
    data=json.loads(p.read_text()).get("package", {})
    if data:
        name=data.get("name")
        if name:
            print(name, data.get("version"))
except Exception as e:
    print("ERROR:", e)
PY
done | rg '`@tanstack`'

echo
echo "== count packages named `@tanstack` =="
python3 - <<'PY'
import json
from pathlib import Path
from pathlib import Path
import re

names = set()
for p in sorted(Path('.').rglob('package.json')):
    if 'node_modules' in p.parts:
        continue
    try:
        data=json.loads(p.read_text())
    except Exception as e:
        continue
    name=data.get('package', {}).get('name')
    if name and name.startswith('`@tanstack/`'):
        names.add(name)

print(f"tracked `@tanstack` package names: {sorted(names)}")
print(f"count: {len(names)}")
PY

Repository: TanStack/table

Length of output: 1218


🌐 Web query:

TanStack table v9 stable release packages @TanStack 19 packages changeset

💡 Result:

As of August 4, 2026, TanStack Table v9 has not reached a stable release [1][2]. It is currently in an active beta phase, with version v9.0.0-beta.80 having been released on this date [2]. The v9 release is a major update focused on architectural improvements, including enhanced state management, improved tree-shakability, and better extensibility [3]. Because the project is in beta, developers are advised to use the beta tag when installing the packages via npm [4]. Regarding the "19 packages" and "changeset" queries: - TanStack Table v9 utilizes a modular, multi-package structure common to the TanStack ecosystem [5]. While the specific count of published packages can fluctuate during development, the repository maintains core and framework-specific adapter packages [5]. - Changesets are used by the TanStack project to manage versioning and changelogs across its monorepo structure. You can track the progress of these changes and the accumulation of features by reviewing the pull requests and release notes in the official GitHub repository [1][5]. For the most accurate list of packages currently being published under the @tanstack scope for v9, you should check the contents of the repository's packages directory or the official documentation as they evolve during the beta process [4][5]. Documentation for v9 is currently being rewritten and is available alongside the beta releases [3][4]. For production environments, the official recommendation remains to use the latest stable version, which is v8 [4].

Citations:


Add the missing package to the major release changeset.

This changeset declares 18 packages, but the release scope targets 19. Changesets releases only the named packages, so add the missing package before merging this release.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.changeset/v9-stable-release.md around lines 2 - 19, Add the omitted
nineteenth package to the major-release package list in v9-stable-release.md,
preserving the existing major bump declarations for all listed packages.

Source: MCP tools


🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

pnpm changeset status

Repository: TanStack/table

Length of output: 3250


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== files =="
git ls-files | rg '(^|/)(package\.json|pnpm-workspace\.yaml|\.changesetsrc|\.changeset/v9-stable-release\.md)$|(^|/)changesets-config|\.changesetsrc$' || true

echo "== package files with table-core listed around beta versions =="
for f in $(git ls-files | rg '(^|/)package\.json$|(^|/)pnpm-workspace\.yaml$|\.changesetsrc$'); do
  if rg -n '"`@tanstack/`.*(table|sorter)?:\s*9\.0\.0-beta\.80|`@tanstack/`(table-core|match-sorter-utils)|"version"\s*:\s*"9\.0\.0-beta\.80"' "$f" >/dev/null 2>&1; then
    echo "--- $f ---"
    sed -n '1,220p' "$f"
  fi
done

echo "== changeset config =="
for f in $(git ls-files '.changesetsrc' '.changesets/config.json' 'package.json'); do
  if [ "$f" = "package.json" ]; then
    sed -n '1,180p' "$f"
  else
    sed -n '1,180p' "$f"
  fi
done

Repository: TanStack/table

Length of output: 50371


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== root package =="
sed -n '1,220p' package.json

echo "== pnpm workspace =="
sed -n '1,220p' pnpm-workspace.yaml

echo "== candidate package manifests =="
for f in package.json pnpm-workspace.yaml .changeset/v9-stable-release.md .changesetsrc .changesets/config.json; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    sed -n '1,220p' "$f"
  fi
done

echo "== listed package top-level versions =="
python3 - <<'PY'
import json
from pathlib import Path
packages = [
  "packages/table-core/package.json",
  "packages/table-devtools/package.json",
  "packages/alpine-table/package.json",
  "packages/angular-table/package.json",
  "packages/angular-table-devtools/package.json",
  "packages/ember-table/package.json",
  "packages/lit-table/package.json",
  "packages/octane-table/package.json",
  "packages/preact-table/package.json",
  "packages/preact-table-devtools/package.json",
  "packages/react-table/package.json",
  "packages/react-table-devtools/package.json",
  "packages/solid-table/package.json",
  "packages/solid-table-devtools/package.json",
  "packages/svelte-table/package.json",
  "packages/vue-table/package.json",
  "packages/vue-table-devtools/package.json",
  "packages/match-sorter-utils/package.json",
]
for p in packages:
    data = json.loads(Path(p).read_text())
    print(f"{data['name']}: {data['version']}")
PY

echo "== lock/package.json TanStack entries for listed packages =="
for pkg in $(sed -n '2,20p' .changeset/v9-stable-release.md | tr -d "'"): do
  echo "--- $pkg ---"
  rg -n "\"$pkg\"|\"`@tanstack/`$pkg\"" package.json pnpm-workspace.yaml packages/*/package.json examples/*/ | head -80 || true
done

Repository: TanStack/table

Length of output: 16822


🌐 Web query:

Changesets prereleas

💡 Result:

Changesets provides a prerelease mode designed for releasing versions before a stable release (e.g., 1.0.0-beta.0) [1][2][3]. Because this feature is complex and reduces standard safety rails, it is strongly recommended that you fully understand npm publish workflows and the associated risks before use [1][4][5]. Core Concepts and Workflow 1. Entering Prerelease Mode: Use the command changeset pre enter to initiate this mode [1][6]. This creates a pre.json file in your.changeset directory, which tracks the current prerelease state [1][3]. The you provide (e.g., beta or next) is used both for the version suffix (e.g., 1.0.0-beta.0) and the npm dist-tag [1][2][6]. 2. Versioning and Publishing: While in prerelease mode, run changeset version as you normally would [1][6]. Changesets will append the prerelease tag to your versions [1][3]. Note that this process will bump dependent packages even if they would not typically be bumped in a standard release, as most semver ranges do not satisfy prerelease versions [1][2]. Afterward, run changeset publish to push the packages to npm using the specified dist-tag [1][6]. 3. Exiting Prerelease Mode: When you are ready for a stable release, use changeset pre exit [1][6]. This command sets an intent to exit prerelease mode in the pre.json file without performing actual versioning [1][2]. Following this, running changeset version will produce the next stable version (e.g., 1.0.0) [6]. Important Recommendations - Branching Strategy: It is highly recommended to perform prereleases from a branch other than your main or default branch [1][3]. Running prereleases on the main branch without a dedicated stable-release branch can block other changes until the prerelease mode is exited [1][2]. - Alternatives: If you require a simpler mechanism, consider using snapshot releases, which are less involved than the full prerelease workflow [4][5]. For more details on the state management, you can refer to the PreState type definition in the @changesets/types package [1][2].

Citations:


Run the prerelease-exit flow for this stable release.

The packages list uses major on 9.0.0-beta.80, and these workspaces publish with workspace:*, so this can resolve released dependency packages and advance TanStack Table to 10.x instead of stable 9.0.0. Use changeset pre exit or otherwise ensure the stable release plan targets 9.0.0 for all listed packages before publishing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.changeset/v9-stable-release.md around lines 2 - 19, Update the release plan
for the listed TanStack Table packages by running the changeset prerelease-exit
flow before publishing, or otherwise pinning the stable release versions to
9.0.0 instead of applying major increments from 9.0.0-beta.80. Ensure all
packages in the changeset resolve to the intended 9.0.0 release.

Source: MCP tools

'@tanstack/match-sorter-utils': major
---

TanStack Table v9 stable release. See the "Migrating to V9" guide for your framework (e.g. [React](https://tanstack.com/table/latest/docs/framework/react/guide/migrating)) for upgrade instructions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target changeset =="
cat -n .changeset/v9-stable-release.md 2>/dev/null || true

echo
echo "== all migration links in repository =="
rg -n 'tanstack\.com/table/.*/guide/migrating|/docs/framework/.*/guide/migrating' .changeset README.md 2>/dev/null || true

echo
echo "== package/version references =="
rg -n '"`@tanstack/table-core`"|"`@tanstack/react-table`"|version|latest|beta' package.json pnpm-lock.yaml package-lock.json yarn.lock 2>/dev/null | head -120 || true

Repository: TanStack/table

Length of output: 10134


🌐 Web query:

TanStack Table V9 migrate guide tanstack.com/table beta docs framework react guide migrating

💡 Result:

As of August 4, 2026, TanStack Table V9 is in active beta development (current version v9.0.0-beta.80) [1]. Because it is a major architectural release, the official migration documentation is hosted under the beta section of the TanStack website [2]. The official migration guide for React users can be found at: https://tanstack.com/table/beta/docs/framework/react/guide/migrating [2] Key changes and migration steps for V9 include: Core Architectural Changes 1. Feature Declaration: V9 introduces a required features table option. Unlike previous versions where all features were bundled, you must now explicitly declare the features your table requires [2][3]. 2. Tree-Shaking and Row Models: Row models (filtering, sorting, pagination, etc.) are now configured via tableFeatures rather than individual get*RowModel options. This change enables better tree-shaking by allowing you to register only the specific functions you use [2][4]. 3. Quick Legacy Migration: For those needing an incremental transition, a deprecated useLegacyTable (or equivalent) hook is available to support V8-style APIs while running on V9 [2][5]. This is intended only as a temporary aid and carries a larger bundle size [5][3]. Common Migration Checklist - Replace older hook imports (e.g., useReactTable) with V9-compatible versions. - Move feature and row-model configurations into the new features table option [2][4]. - Update row model function registration (e.g., filterFns, sortFns) to use the new tableFeatures slots [6][4]. - If you were using aggregation features, note that aggregation has been split out of columnGroupingFeature into a new rowAggregationFeature [6][4]. - Update any column pinning logic from physical (left/right) to logical (start/end) terminology for improved layout support [6]. Because V9 is still in beta, expect documentation and APIs to evolve based on community feedback [7]. Always consult the official beta documentation for the most recent updates relevant to your framework [2][6][4].

Citations:


Pin the V9 migration link to a stable documentation version.

The /latest/ path can later route to the V8 migration guide. Use a version-pinned V9 URL, such as the current beta migration guide, after the V9 documentation deployment is final.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.changeset/v9-stable-release.md at line 22, Update the “Migrating to V9”
link in the stable release changelog to use a version-pinned V9 documentation
URL instead of the /latest/ path, preserving the framework-specific migration
guide link structure.

Source: MCP tools

@KevinVandy
KevinVandy requested a review from a team as a code owner August 4, 2026 05:09
@KevinVandy
KevinVandy merged commit 2327f80 into main Aug 4, 2026
10 of 11 checks passed
@KevinVandy
KevinVandy deleted the release-v9 branch August 4, 2026 05:23

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/framework/lit/guide/migrating.md (1)

5-8: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove the beta-cycle disclaimer from the stable guide.

This file ships as the v9 stable migration guide, but the new introduction still says that the API may change during the beta cycle. Replace this with stable-release wording or keep the disclaimer only in a beta-specific document.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/framework/lit/guide/migrating.md` around lines 5 - 8, Update the
introduction in the V9 migration guide to remove beta-cycle/API-change
disclaimer language and replace it with wording appropriate for a stable
release. Keep the existing overview of V9’s architectural improvements and table
logic unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/framework/octane/guide/custom-features.md`:
- Line 159: Correct the constructTableAPIs lifecycle description so it states
that each feature runs after its own initTableInstanceData, while
later-registered features’ instance data and APIs may still be unavailable.
Apply the same documentation update in
docs/framework/octane/guide/custom-features.md:159-159,
docs/framework/preact/guide/custom-features.md:159-159,
docs/framework/react/guide/custom-features.md:159-159,
docs/framework/solid/guide/custom-features.md:153-153,
docs/framework/svelte/guide/custom-features.md:153-153, and
docs/framework/vue/guide/custom-features.md:153-153.

In `@docs/framework/react/quick-start.md`:
- Line 10: Update the install commands in
docs/framework/react/quick-start.md:10-10,
docs/framework/solid/quick-start.md:10-10, and
docs/framework/svelte/quick-start.md:12-12 to install the v9 beta package tag by
adding `@beta` to each framework-specific package, keeping the surrounding v9
documentation consistent.

In `@packages/svelte-table/skills/table-state/SKILL.md`:
- Line 170: Update the front matter metadata in the skill document so
library_version matches the stable v9 release described by the API guidance, or
revise the guidance to explicitly remain beta-scoped; keep the version
declaration and surrounding documentation consistent.

---

Outside diff comments:
In `@docs/framework/lit/guide/migrating.md`:
- Around line 5-8: Update the introduction in the V9 migration guide to remove
beta-cycle/API-change disclaimer language and replace it with wording
appropriate for a stable release. Keep the existing overview of V9’s
architectural improvements and table logic unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d25e1cce-3108-456b-bb07-483e59ecfba2

📥 Commits

Reviewing files that changed from the base of the PR and between 3a06303 and a50ba30.

📒 Files selected for processing (59)
  • .github/workflows/zizmor.yml
  • README.md
  • docs/devtools.md
  • docs/framework/alpine/guide/custom-features.md
  • docs/framework/alpine/quick-start.md
  • docs/framework/angular/guide/custom-features.md
  • docs/framework/angular/guide/migrating.md
  • docs/framework/angular/quick-start.md
  • docs/framework/ember/guide/custom-features.md
  • docs/framework/ember/quick-start.md
  • docs/framework/lit/guide/custom-features.md
  • docs/framework/lit/guide/migrating.md
  • docs/framework/lit/quick-start.md
  • docs/framework/octane/guide/custom-features.md
  • docs/framework/octane/quick-start.md
  • docs/framework/preact/guide/custom-features.md
  • docs/framework/preact/guide/migrating.md
  • docs/framework/preact/quick-start.md
  • docs/framework/react/guide/custom-features.md
  • docs/framework/react/guide/migrating.md
  • docs/framework/react/quick-start.md
  • docs/framework/solid/guide/custom-features.md
  • docs/framework/solid/guide/migrating.md
  • docs/framework/solid/quick-start.md
  • docs/framework/svelte/guide/custom-features.md
  • docs/framework/svelte/guide/migrating.md
  • docs/framework/svelte/quick-start.md
  • docs/framework/vanilla/quick-start.md
  • docs/framework/vue/guide/custom-features.md
  • docs/framework/vue/guide/migrating.md
  • docs/framework/vue/quick-start.md
  • docs/guide/row-models.md
  • docs/installation.md
  • packages/alpine-table/README.md
  • packages/angular-table/README.md
  • packages/angular-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/ember-table/README.md
  • packages/lit-table/README.md
  • packages/lit-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/match-sorter-utils/README.md
  • packages/octane-table/README.md
  • packages/preact-table-devtools/README.md
  • packages/preact-table/README.md
  • packages/preact-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/react-table-devtools/README.md
  • packages/react-table/README.md
  • packages/react-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/solid-table-devtools/README.md
  • packages/solid-table/README.md
  • packages/solid-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/svelte-table/README.md
  • packages/svelte-table/skills/migrate-v8-to-v9/SKILL.md
  • packages/svelte-table/skills/table-state/SKILL.md
  • packages/table-core/README.md
  • packages/table-core/skills/migrate-v8-to-v9/SKILL.md
  • packages/table-devtools/README.md
  • packages/vue-table-devtools/README.md
  • packages/vue-table/README.md
  • packages/vue-table/skills/migrate-v8-to-v9/SKILL.md

##### constructTableAPIs

The `constructTableAPIs` method in a table feature is exclusively responsible for adding methods to the `table` instance. It runs after all feature-owned table instance data has been initialized. For example, in the [Row Selection](https://github.com/TanStack/table/blob/beta/packages/table-core/src/features/row-selection/rowSelectionFeature.ts) feature, the `constructTableAPIs` method adds many table instance API methods such as `toggleAllRowsSelected`, `getIsAllRowsSelected`, `getIsSomeRowsSelected`, etc. So then, when you call `table.toggleAllRowsSelected()`, you are calling a method that was added to the table instance by the `rowSelectionFeature` feature.
The `constructTableAPIs` method in a table feature is exclusively responsible for adding methods to the `table` instance. It runs after all feature-owned table instance data has been initialized. For example, in the [Row Selection](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/row-selection/rowSelectionFeature.ts) feature, the `constructTableAPIs` method adds many table instance API methods such as `toggleAllRowsSelected`, `getIsAllRowsSelected`, `getIsSomeRowsSelected`, etc. So then, when you call `table.toggleAllRowsSelected()`, you are calling a method that was added to the table instance by the `rowSelectionFeature` feature.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Locate relevant docs files =="
git ls-files | rg '(^|/)docs/framework/.*/guide/custom-features\.md$|packages/table-core/src/core/table/constructTable\.ts$|packages/table-core/src/features/row-selection/rowSelectionFeature\.ts$' || true

echo "== Inspect constructTable implementation =="
if [ -f packages/table-core/src/core/table/constructTable.ts ]; then
  wc -l packages/table-core/src/core/table/constructTable.ts
  cat -n packages/table-core/src/core/table/constructTable.ts
fi

echo "== Inspect feature files =="
if [ -f packages/table-core/src/features/row-selection/rowSelectionFeature.ts ]; then
  wc -l packages/table-core/src/features/row-selection/rowSelectionFeature.ts
  cat -n packages/table-core/src/features/row-selection/rowSelectionFeature.ts
fi

echo "== Locate feature lifecycle definitions in table core =="
rg -n "constructTableAPIs|initTableInstanceData|constructTable|TableFeature" packages/table-core/src -S | head -200

echo "== Check docs snippets =="
for f in docs/framework/octane/guide/custom-features.md docs/framework/preact/guide/custom-features.md docs/framework/react/guide/custom-features.md docs/framework/solid/guide/custom-features.md docs/framework/svelte/guide/custom-features.md docs/framework/vue/guide/custom-features.md; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    nl -ba "$f" | sed -n '145,165p'
  fi
done

Repository: TanStack/table

Length of output: 38850


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Check custom-features doc snippets =="
for f in docs/framework/octane/guide/custom-features.md docs/framework/preact/guide/custom-features.md docs/framework/react/guide/custom-features.md docs/framework/solid/guide/custom-features.md docs/framework/svelte/guide/custom-features.md docs/framework/vue/guide/custom-features.md; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    awk 'NR>=145 && NR<=165 {printf "%6d\t%s\n", NR, $0}' "$f"
  fi
done

echo "== Check whether constructTable orders features deterministically =="
python3 - <<'PY'
from pathlib import Path
src = Path("packages/table-core/src/core/table/constructTable.ts").read_text()
if "for (let i = 0; i < featuresList.length; i++)" in src and "for (let i = 1; i <= featuresList.length; i++)" not in src:
    print("constructTable iterates features forward by index")
else:
    print("constructTable iteration shape differs")
PY

echo "== Read-only behavior probe: feature lifecycle order with duplicate hooks =="
python3 - <<'PY'
features = [
    {
        "name": "firstFeature",
        "initTableInstanceData": lambda table: table.setdefault("events", []).append("first/init"),
        "constructTableAPIs": lambda table: table.setdefault("events", []).append("first/api"),
    },
    {
        "name": "secondFeature",
        "initTableInstanceData": lambda table: table.setdefault("events", []).append("second/init"),
        "constructTableAPIs": lambda table: table.setdefault("events", []).append("second/api"),
    },
]

table = {}
for feature in features:
    feature["initTableInstanceData"](table)
    feature["constructTableAPIs"](table)

assert table["events"] == ["first/init", "first/api", "second/init", "second/api"]
print(table["events"])
print("hook order matches source loop: initTableInstanceData then constructTableAPIs per feature")
PY

Repository: TanStack/table

Length of output: 16317


Correct the constructTableAPIs lifecycle description.

constructTableAPIs runs after the current feature’s initTableInstanceData, not after all feature-owned table instance data. Later-registered features are still pending, so their instance data and APIs are unavailable. Update every custom-features.md page under docs/framework/*.

📍 Affects 6 files
  • docs/framework/octane/guide/custom-features.md#L159-L159 (this comment)
  • docs/framework/preact/guide/custom-features.md#L159-L159
  • docs/framework/react/guide/custom-features.md#L159-L159
  • docs/framework/solid/guide/custom-features.md#L153-L153
  • docs/framework/svelte/guide/custom-features.md#L153-L153
  • docs/framework/vue/guide/custom-features.md#L153-L153
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/framework/octane/guide/custom-features.md` at line 159, Correct the
constructTableAPIs lifecycle description so it states that each feature runs
after its own initTableInstanceData, while later-registered features’ instance
data and APIs may still be unavailable. Apply the same documentation update in
docs/framework/octane/guide/custom-features.md:159-159,
docs/framework/preact/guide/custom-features.md:159-159,
docs/framework/react/guide/custom-features.md:159-159,
docs/framework/solid/guide/custom-features.md:153-153,
docs/framework/svelte/guide/custom-features.md:153-153, and
docs/framework/vue/guide/custom-features.md:153-153.

Source: MCP tools


```bash
npm install @tanstack/react-table@beta
npm install @tanstack/react-table

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

for package in \
  `@tanstack/react-table` \
  `@tanstack/solid-table` \
  `@tanstack/svelte-table`
do
  npm view "$package" version dist-tags --json
done

Repository: TanStack/table

Length of output: 1481


🌐 Web query:

@tanstack/react-table npm latest version 9.0.0 stable dist-tags

💡 Result:

As of August 4, 2026, the latest stable version of @tanstack/react-table is 8.21.3 [1][2][3]. Version 9.0.0 has not yet reached a stable release [3][4][5]. The package is currently in an active beta testing phase for version 9.0.0, with regular pre-release updates being published [4][5][6]. As of today, the most recent pre-release version is 9.0.0-beta.80 [4]. In the npm registry, the dist-tag "latest" continues to point to the stable 8.21.3 release [1][3]. Those wishing to test the ongoing V9 development can install the latest beta by using the @beta dist-tag or by explicitly specifying the version (e.g., npm install @tanstack/react-table@beta) [7][3].

Citations:


Pin these installs to the v9 beta tag.

npm install uses the latest tag, which resolves to 8.21.3; the docs currently describe v9. Add @beta to the React/Solid/Svelte install commands, or change the surrounding v9 content to target the existing latest 8.x release.

[documentation_data_integrity]

📍 Affects 3 files
  • docs/framework/react/quick-start.md#L10-L10 (this comment)
  • docs/framework/solid/quick-start.md#L10-L10
  • docs/framework/svelte/quick-start.md#L12-L12
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/framework/react/quick-start.md` at line 10, Update the install commands
in docs/framework/react/quick-start.md:10-10,
docs/framework/solid/quick-start.md:10-10, and
docs/framework/svelte/quick-start.md:12-12 to install the v9 beta package tag by
adding `@beta` to each framework-specific package, keeping the surrounding v9
documentation consistent.

```

Starting in beta.59, `createTable` and `createAppTable` take only options, `table.state` is absent, and `subscribeTable` and `SubscribeSource` are no longer exported. Use native tracked Svelte reads and `$derived` projections.
In v9, `createTable` and `createAppTable` take only options, `table.state` is absent, and `subscribeTable` and `SubscribeSource` are no longer exported. Use native tracked Svelte reads and `$derived` projections.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Update the skill version metadata for the stable release.

This text now describes the APIs as v9, but the front matter still declares library_version: '9.0.0-beta.80' at Line 9. Update that metadata to the stable v9 version used by this release, or keep the guidance explicitly beta-scoped.

🧰 Tools
🪛 SkillSpector (2.4.4)

[error] 132: [MP3] Memory Manipulation: Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Remediation: Protect agent memory and state from modification by untrusted content. Use read-only memory for critical instructions and validate all state changes.

(Memory Poisoning (MP3))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/svelte-table/skills/table-state/SKILL.md` at line 170, Update the
front matter metadata in the skill document so library_version matches the
stable v9 release described by the API guidance, or revise the guidance to
explicitly remain beta-scoped; keep the version declaration and surrounding
documentation consistent.

@github-actions github-actions Bot mentioned this pull request Aug 4, 2026
@connorjan

Copy link
Copy Markdown

Congrats @KevinVandy! Thank you for all your hard work on v9!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants